function [F_RJ_opt] = Frj_manopt(w_hat_J,f_BJ,N_t, Nrj)

% 初始化 Riemannian manifold 结构
manifold = complexcirclefactory(N_t * Nrj); % 复单位圆流形

% 定义问题描述
problem.M = manifold;

A = kron(f_BJ.', eye(N_t));  % Nt * NtNrj

% 定义目标函数
problem.cost = @(vecF_RJ) real((w_hat_J - A * vecF_RJ)' * (w_hat_J - A * vecF_RJ));

% 定义梯度函数
problem.egrad = @(vecF_RJ) -2 * A' * (w_hat_J - A * vecF_RJ);

% 定义Hessian函数
problem.ehess = @(vecF_RJ, u) 2 * A' * A * u;

% 设置优化器选项
options.maxiter = 100; % 最大迭代次数
options.tolgradnorm = 1e-4; % 梯度范数的容忍度
options.verbosity = 0; % 设置verbosity为0，禁用输出

% 随机生成初始点
X0 = problem.M.rand();

% 使用 Manopt 进行 Riemannian manifold 优化
X_opt = trustregions(problem, X0, options);

% 从优化结果中重构 F_RJ
F_RJ_opt = reshape(X_opt, N_t, Nrj);

end

